/**
 * 一、现实生活中的例子
 *  父类更加的抽象、子类更加的具体
 *  父类拥有一般特性、子类还有特殊的特性
 * 继承的作用
 * 1、具体父类的行为
 * 2、扩展父类的行为
 * 公式：子类对象 is a 父类 它就具有继承关系
 * 二、如何实现继承
 * class 子类名称 extends 父类名称{}
 * 三、方法的重写
 * 所谓方法重写是在继承关系中，方法的名称相同，返回值相同，参数的个数，类型相同的这种一种情况称为方法重写
 * 方法重写后的结果是子类的方法完全覆盖父类中对应方法的内容
 * 四、super关键字的使用
 * 1、调用父类中的普通方法 super.方法
 * 2、子类构造调用父类的构造super()
 * 注意：在子类中如果要调用父类的构造方法，必须方在首行
 */
class Teacher1{
    name:string=""
    school:string=""
    constructor(name:string,school:string){
        this.name=name
        this.school=school
    }

    introduce(){
       return `我是${this.school}的${this.name}` 
    }
    giveLession():void{
        console.log('打开录音设备');
        console.log('讲解本章目标');
        console.log('讲解具体内容');
        console.log('进行本小结总结');
        console.log('安排今日作业');
    }
}

class JavaTeacher extends Teacher1{
    private javaAge:number=0
    constructor(name:string,school:string,javaAge:number){
        super(name,school)
        this.javaAge=javaAge
    }
    introduce(): string {
        return `${super.introduce()},我使用java${this.javaAge}年了`
    }
    giveLession(): void {
        console.log('打开Intellj IDEA');
        super.giveLession()
        
    }
}
class WebTeacher extends Teacher1{
    private jsAge:number=0;
    constructor(name:string,school:string,jsAge:number){
        super(name,school)
        this.jsAge=jsAge
    }
    introduce(): string {
        return `${super.introduce()}，使用javascript有${this.jsAge}年了`
    }
    giveLession(): void {
        console.log('打开HBuilder');
        super.giveLession()
    }
}
let jt:JavaTeacher=new JavaTeacher("张三","蜗牛学院",20)
console.log(jt.introduce());
jt.giveLession()
console.log('--------------------------');
let wt:WebTeacher=new WebTeacher("李四","商洛学院",12)
console.log(wt.introduce());
wt.giveLession()



